// The following code is shown Entry point source code of

// miniOS Kernel entry.s

.global _ram_entry

_ram_entry:

b       kernel_init b       _ram_entry b       miniOS_swiHandler b       miniOS_irqHandler

#define irq_stack0xa0380000

.global kernel_init kernel_init:

msr   cpsr_c, #0xc0 | 0x12// IRQ mode ldr     r0, = TCB_IRQStack sub    sp, r0,#4 msr   cpsr_c, #0xc0 | 0x13// SVC mode ldr     r0, =svc_stack sub    sp, r0,#4 msr   cpsr_c, #0xc0 | 0x1f// SYSTEM mode ldr     r0, =sys_stack sub    sp, r0,#4 bl      main b       _ram_entry

.global miniOS_swiHandler miniOS_swiHandler:

stmfd          sp!, {r0-r12, r14}

msr   r1, spsr stmfd          sp!, {r1}

ldr     r10,[lr, #-4]

bic     r10, r10, #0xff000000 mov  r0, r10 bl      swiHandler ldmfd         sp!, {r1}

msr   spsr_cxsf, r1 ldmfd         sp!, {r0-r12, pc}^

.global miniOS_irqhandler miniOS_irqhandler:

msr   cpsr_c, #0xc0 | 0x12// IRQ mode ldr     sp, = TCB_PtrCurrentTask ldr     sp, [sp]

sub    lr, lr, #4 add    sp, sp, #4 stmia sp!, {r0-r12}^

stmia sp! {sp,lr}^

stmia sp! {lr}

sub    sp, sp, #68 mrs   r1, spsr stmia sp!, {r1}

ldr     sp, irq_stack bl      irqHandler ldr     sp, = TCB_PtrNextTask ldr     sp, [sp]

ldmia sp!, {r1}

msrsp         sr_cxsf, r1 ldmia sp!, {r0-r12}^